import axios from 'axios' // 引入axios
import {Message} from 'element-ui'
import router from '../router'
import qs from 'qs'
// 设置网关地址
// 环境的切换
if (process.env.NODE_ENV == 'development') {    
    axios.defaults.baseURL = 'http://192.168.69.68:9000';}
else if (process.env.NODE_ENV == 'debug') {    
   axios.defaults.baseURL = 'http://localhost:8080';
} 
else if (process.env.NODE_ENV == 'production') {    
  axios.defaults.baseURL = 'http://localhost:8080';
}
//设置默认的请求超时时间
axios.defaults.timeout = 10000;
// axios.defaults.withCredentials = true
//设置post的请求头
axios.defaults.headers.post['Content-Type'] = 'application/json';
// 请求拦截器，在请求头里添加TOKEN
axios.interceptors.request.use(
    config => {
       const token = localStorage.getItem("token");
       if (token) {  // 判断是否存在token，如果存在的话，则每个http header都加上token
         const auth =   JSON.parse(token)
         config.headers.Authorization = (auth.token_type + " " + auth.access_token);
       }
       return config;
     },
     err => {
       this.$router.push("/login")
       return Promise.reject(err);
     });

     axios.interceptors.response.use(function (response) {
        if (response.data.code === 403) {
        localStorage.clear();// 删除已经失效或过期的token（不删除也可以，因为登录后覆盖）
        router.replace({
              path: '/login', // 到登录页重新获取token
              query: { 
                //回到当前页面
                  redirect: router.currentRoute.fullPath
                } 
            })
          }

      return response
    
    }, function (error) {
          if (error.response) {
            if(error.response.status===403){
                  Message({
                    showClose: true,
                    message: '登录过期',
                    type: 'error'
                 });
            localStorage.clear();
            // Cookies.set("user","",-10);
            router.replace({
              path: '/login' // 到登录页重新获取token
            })
        }else if(error.response.status===405){
          Message({
            showClose: true,
            message: '权限不足,请联系管理员',
            type: 'warning'
            });
            router.replace({
                  path: '/error', 
            })
        }else if(error.response.status===500){
              Message({
                showClose: true,
                message: '服务器异常',
                type: 'error'
                });
              }
        }
      return Promise.reject(error)
    })
    /** 
 * post方法，对应post请求 
 */
export function post(url, params) {
    return new Promise((resolve, reject) => {
        axios.post(url, params)
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}
/**
 * post方法，对应post请求
 */
export function postForm(url, params) {
    return new Promise((resolve, reject) => {
        axios.post(url, qs.stringify(params), {
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        })
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}
/**
 * get方法，对应get请求
 */
export function get(url, params) {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params
        }).then(res => {
            resolve(res.data);
        }).catch(err => {
            reject(err.data)
        })
    });
}
